import Vue from "vue"
//导入 Vuex  构造函数  插件
import Vuex from "vuex"
//使用
Vue.use(Vuex);

//创建 store 实例对象
export default new Vuex.Store({
    state:{  //state存储公共数据状态，值为对象
        num:100,
        str:"近乡情更怯，不敢问来人"
    },
    mutations:{   
        //state 中的数据 只能通过 mutations 中的方法去同步更新
        //  mutations 中的方法只能通过 commit 去调用
        add(state){
            state.num += 1;  
        },
        addN(state,step){
            state.num += step;
        },
        sub(state){
            state.num -= 1;
        },
        subN(state,step){
            state.num -= step;
        }
    },
    actions:{  //写异步的代码
        //异步方法，通过调用 mutations 中的同步方法来异步更新 state 中的数据
        // actions中的方法只能通过 dispatch 去调用
        asyncAdd({commit}){
            setTimeout(()=>{
                commit("add");
            },1000)
        },
        asyncAddN({commit},step){
            setTimeout(()=>{
                commit("addN",step);
            },1000)
        },
        asyncSub({commit}){
            setTimeout(()=>{
                commit("sub");
            },1000)
        },
        asyncSubN({commit},step){
            setTimeout(()=>{
                commit("subN",step)
            },1000)
        }
    }
})